﻿using System;

namespace Lesson_2一维数组
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 基本概念
            //数组是存储一组相同类型数据的集合
            //主要用于存储游戏中同一类型对象 如：所有NPC
            //分为一维数组 多维数组 交错数组
            //一维数组一般简称为数组
            #endregion

            #region 数组的申明
            //所有变量类型都可以申明为数组！！！

            //方法一：变量类型[] 数组名
            int[] arr1;     //仅申明，不分配内存空间

            //方法二：变量类型[] 数组名 = new 变量类型[数组长度]
            int[] arr2 = new int[5];

            //方法三：变量类型[] 数组名 = new 变量类型[数组长度] {内容1, 内容2, 内容3, ......}
            int[] arr3 = new int[5] { 1, 2, 3, 4, 5 };

            //方法四：变量类型[] 数组名 = new 变量类型[] {内容1, 内容2, 内容3, ......}
            int[] arr4 = new int[] { 1, 2, 3, 4, 5 };     //数组长度由内容项数决定  

            //方法五：变量类型[] 数组名 = {内容1, 内容2, 内容3, ......}
            //编译器会自动推断数组类型和长度
            int[] arr5 = { 1, 2, 3, 4, 5 };       //数组长度由内容项数决定  

            //以上方法均为静态初始化，实际上还能够使用 动态初始化 的方法以在运行时确定数组的长度
            int size = 5;
            int[] arr6 = new int[size];
            #endregion

            #region 数组的使用

            int[] array = { 1, 2, 3, 4, 5 };

            // 1. 数组的长度
            //通过 数组变量名.Length获取数组长度
            Console.WriteLine(array.Length);

            // 2. 访问数组中的元素
            //数组的下标从 0 开始 因为访问一个数组元素是通过计算该元素与数组第一项的偏移量实现的 若从 1 开始则每次访问都需要进行减 1 计算
            //访问数组第一项
            Console.WriteLine(array[0]);
            //访问数组元素 下标不能越界！！！  否则会报错
            try
            {
                Console.WriteLine(array[5]);
            }
            catch
            {
                Console.WriteLine("请按规范访问");
            }

            // 3. 修改数组中的元素
            //直接访问目标元素 赋值即可
            Console.WriteLine(array[0]);
            array[0] = 10086;
            Console.WriteLine(array[0]);

            // 4. 遍历数组
            //通过循环 快速访问数组中的所有元素
            #region 分割线
            Console.WriteLine("*************************");
            #endregion
            for(int i = 0; i < array.Length; i++)
            {
                Console.WriteLine(array[i]);
            }
            // 5. 改变数组的长度
            //数组初始化后 不能够直接改变数组长度
            //因此需要通过 申明新数组 再将新数组赋值给原数组 以实现改变数组长度的需求
            #region 分割线
            Console.WriteLine("*************************");
            #endregion
            int[] array2 = new int[6];
            for(int i = 0;i < array.Length; i++)
            {
                array2[i] = array[i];
            }
            array = array2;
            for (int i = 0; i < array.Length; i++)
            {
                Console.WriteLine(array[i]);
            }

            // 6. 查找数组中的元素
            //通过遍历进行数组元素的查找
            //例如 查找 3 是否在数组中 以及 在数组中的位置
            #region 分割线
            Console.WriteLine("*************************");
            #endregion
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i] == 3)
                {
                    Console.WriteLine("3 是该数组的第{0}项", i + 1);
                }
            }
            #endregion

            //掌握：遍历 增删查改！！！
        }
    }
}